﻿using System;
using System.Threading.Tasks;

namespace Vk.Methods.Other
{
    /// <summary>
    ///     Прочее
    /// </summary>
    public class Other
    {
        private readonly Api _api;

        public Other(Api api)
        {
            _api = api;
        }

        /// <summary>
        ///     Универсальный метод, который позволяет запускать последовательность других методов, сохраняя и фильтруя
        ///     промежуточные результаты.
        /// </summary>
        /// <param name="code">
        ///     Код алгоритма в VKScript - формате, похожем на JavaSсript или ActionScript (предполагается
        ///     совместимость с ECMAScript). Алгоритм должен завершаться командой return %выражение%. Операторы должны быть
        ///     разделены точкой с запятой.
        /// </param>
        public async Task<ApiNode> Execute(string code)
        {
            if (code == null)
                throw new ArgumentNullException(nameof(code));

            var query = new ApiQuery("execute")
                .Add("code", Uri.EscapeDataString(code));

            return await _api.Manager.Execute(query);
        }
    }
}